# 1.创建一个BankAccount类，要求：
# 有类属性bank_name（银行名称）
# 有实例属性account_name（账户名）和balance（余额）
# 有方法deposit(amount)（存款）和withdraw(amount)（取款）
# 有方法display()显示账户信息
# 修改上面的BankAccount类，将实例属性私有化，并提供相应的getter和setter方法，在setter方法中加入验证逻辑（余额不能为负数）。
# 为BankAccount类添加一个类方法change_bank_name(new_name)用于修改银行名称，和一个静态方法calculate_interest(principal, rate, time)用于计算利息(金额，利率，时间)。
# class BankAccount:
#     bank_name='商业银行'
#
#     def __init__(self,account_name,balance):
#         print("-------初始化账户--------")
#         self.__account_name=account_name
#         self.__balance=balance
#     def setAccount(self,account_name):
#         self.__account_name = account_name
#     def setBalance(self,balance):
#         if balance <0:
#             self.__age =0
#         else:
#             self.__balance = balance
#     def getAccount(self):
#         return self.__account_name
#     def getBalance(self,balance):
#         return self.__balance
#
#     def deposit(self,amount):
#         if amount >0:
#             self.__balance += amount
#             print(f"存款成功，存入金额: {amount}，当前余额: {self.__balance}")
#         else:
#             print("存款金额必须为正数")
#
#     def withdraw(self, amount):
#         if amount <=0:
#             print("取款金额必须为正数")
#             return
#         elif amount > self.__balance:
#             print("余额不足，取款失败")
#         else:
#             self.__balance -= amount
#             print(f"取款成功，取出金额: {amount}，当前余额: {self.__balance}")
#     def display(self):
#         print(f"银行名称: {BankAccount.bank_name}")
#         print(f"账户名称: {self.__account_name}")
#         print(f"账户余额: {self.__balance}")
#     @classmethod
#     def change_bank_name(cls,newname):
#         print(f"-----类方法------银行名称为{newname}")
#     @staticmethod
#     def calculate_interest(principal, rate, time):
#         if principal < 0 or rate < 0 or time < 0:
#             print("参数不能为负数")
#             return 0
#         interest=principal*rate*time
#         print(f"-----静态方法------利息为{interest}")
# # 创建账户
# acc = BankAccount("张三", 1000)
# # 显示账户信息
# acc.display()
# # 存款
# acc.deposit(500)
# # 取款
# acc.withdraw(300)
# # 测试取款失败情况
# acc.withdraw(2000)
# # 修改账户名
# acc.setAccount("张三丰")
# # 显示修改后的信息
# acc.display()
# # 修改银行名称
# BankAccount.change_bank_name("工商银行")
# # 计算利息
# interest = BankAccount.calculate_interest(10000, 0.03, 2)
# 2.创建一个Animal类，实现以下魔术方法：
# __init__：初始化动物名称和年龄
# __str__：返回动物的描述信息
# __del__：在对象销毁时打印信息
class Animal:
    type = "狗"

    def __init__(self,name,age):
        self.name = name
        self.age = age

    def run(self):
        print("四条腿狂奔")

    def __str__(self):
        return f"{self.name}的品种为{Animal.type},年龄为{self.age}"

    def __del__(self):
        print("---对象被销毁时，执行该方法---")
huang = Animal("大黄",3)
print(huang)
hei = Animal("小黑",4)
print(hei)




# 3.class Book:
#     def __init__(self, title, price):
#         self.title = title
#         self.price = price
#     # 请在此处添加 __str__ 方法
#
# # 测试代码
# book = Book("Python入门", 59.8)
# print(book) # 期望输出: 书名: 《Python入门》, 价格: 59.8元
#     def __str__(self):
#         return f"{self.name}的品种为{Animal.type},年龄为{self.age}"
# class Book:
#     def __init__(self, title, price):
#         self.title = title
#         self.price = price
#     def __str__(self):
#         return f"书名:{self.title},价格:{self.price}"
# book = Book("Python入门", 59.8)
# print(book)
# 4.请设计一个Rectangle(矩形)类。
#   属性:私有属性__length(长),__width(宽)。
#   方法:__init__(self, length, width):初始化长和宽。
#       set_length(self,length)和 get_length(self):
#          设置和获取长度,设置时需检查长度是否大于0。
#       set_width(self,width)和 get_width(self):
#          设置和获取宽度,设置时需检查宽度是否大于0。
#       get_area(self):计算并返回矩形的面积。
#       get_perimeter(self):计算并返回矩形的周长。
#       __str__(self):返回矩形的描述信息,
#          如“矩形[长=5.0,宽=3.0]”。
# 编写代码测试这个类,创建一个矩形对象,
# 计算其面积和周长,并尝试设置一个非法的负值宽度。
# class Rectangle:
#
#     def __init__(self, length, width):
#         self.__length=length
#         self.__width = width
#     def set_length(self,length):
#         if length <=0:
#             self.__length =0
#         else:
#             self.__length=length
#     def set_width(self,width):
#         if width <=0:
#             self.__width =0
#         else:
#             self.__width=width
#
#     def get_length(self):
#         return self.__length
#
#     def get_width(self):
#         return self.__width
#     def  get_area(self):
#         area=self.__length*self.__width
#         print(f'矩形的面积为{area}')
#     def  get_perimeter(self):
#         perimeter= (self.__length+self.__width)*2
#         print(f'矩形的周长为{perimeter}')
#
#     def __str__(self):
#         return f"矩形[长={self.__length},宽={self.__width}]"
#
#
# rect1 = Rectangle(5, 3)
# print(rect1)
# rect1.get_area()
# rect1.get_perimeter()
#
# rect2 = Rectangle(10, 6)
# print(rect2)
#




